package frpc.manager.operation;

import frpc.manager.basics.IRedisBusinessManager;
import frpc.manager.basics.RedisBasicsBusinessManager;
import frpc.manager.hash.IRedisHashManager;
import frpc.manager.list.IRedisListManager;
import frpc.manager.lock.IRedisLockManager;
import frpc.manager.set.IRedisSetManager;
import frpc.manager.string.IRedisSerializableManager;
import org.springframework.context.ApplicationContext;

/**
 * 类描述:  Redis业务处理接口实现
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2020/11/26 0026 下午 5:26
 */
public class RedisManagerImpl extends AbstractRedisManager {

    /**
     * 功能描述：Redis业务处理接口实现
     *
     * @author : 王雷
     * @date : 2020/11/26 0026 下午 5:29
     */
    protected RedisManagerImpl() {
    }

    /**
     * 功能描述：获取Redis锁处理对象
     *
     * @return : Redis锁处理对象
     * @author : 王雷
     * @date : 2022/6/2 0002 下午 3:12
     */
    @Override
    public IRedisLockManager giveRedisLockManager() {
        return new InteriorRedisLockManagerImpl(this);
    }

    /**
     * 功能描述：获取Redis——Hash处理对象
     *
     * @return : Redis——Hash处理对象
     * @author : 王雷
     * @date : 2022/6/2 0002 下午 3:12
     */
    @Override
    public IRedisHashManager giveRedisHashManager() {
        return new InteriorRedisHashManagerImpl(giveRedisLockManager());
    }

    /**
     * 功能描述：获取Redis——List处理对象
     *
     * @return : Redis——List处理对象
     * @author : 王雷
     * @date : 2022/6/2 0002 下午 3:12
     */
    @Override
    public IRedisListManager giveRedisListManager() {
        return new InteriorRedisListManagerImpl(giveRedisLockManager());
    }

    /**
     * 功能描述：获取Redis——Set处理对象
     *
     * @return : Redis——Set处理对象
     * @author : 王雷
     * @date : 2022/6/2 0002 下午 3:12
     */
    @Override
    public IRedisSetManager giveRedisSetManager() {
        return new InteriorRedisSetManagerImpl(giveRedisLockManager());
    }

    /**
     * 功能描述：获取Redis——String处理对象
     *
     * @return : Redis——String处理对象
     * @author : 王雷
     * @date : 2022/6/2 0002 下午 3:12
     */
    @Override
    public IRedisSerializableManager giveRedisSerializableManager() {
        return new InteriorRedisSerializableManagerImpl(giveRedisLockManager());
    }

    /**
     * 功能描述：获取Redis处理抽象
     *
     * @return : Redis——String处理对象
     * @author : 王雷
     * @date : 2022/6/2 0002 下午 3:12
     */
    @Override
    public IRedisBusinessManager giveRedisBasicsBusinessManager() {
        return new RedisBasicsBusinessManagerClass(giveRedisLockManager());
    }

    /**
     * 类描述: Redis抽象内部类
     *
     * @author : 王雷
     * @date : 2022/6/5 0005 下午 4:52
     */
    private static class RedisBasicsBusinessManagerClass extends RedisBasicsBusinessManager {

        /**
         * 功能描述：Redis基础处理对象
         *
         * @param iRedisLockManager Redis——锁处理接口
         * @author : 王雷
         * @date : 2020/11/26 0026 下午 4:48
         */
        protected RedisBasicsBusinessManagerClass(IRedisLockManager iRedisLockManager) {
            super(iRedisLockManager);
        }
    }
}
